package com.java.test;

import org.junit.Test;

import java.math.BigDecimal;
import java.math.BigInteger;

/**
 * 其他常用类的使用
 * 1.System
 * 2.Math
 * 3.BigInteger 和 BigDecimal
 *
 * @author shkstart
 * @create 2021-01-07 19:50
 */
public class OtherClass {
    //System类：
    @Test
    public void test1() {
        //时间戳
        Long time = System.currentTimeMillis();
        System.out.println(time);
        //java的版本
        String javaVersion = System.getProperty("java.version");
        System.out.println("java的version" + javaVersion);
        //java的文件路径
        String javaHome = System.getProperty("java.home");
        System.out.println("java的Home" + javaHome);
        //系统的名字
        String osName = System.getProperty("os.name");
        System.out.println("os的name" + osName);
        //系统的版本
        String osVersion = System.getProperty("os.version");
        System.out.println("os的version" + osVersion);
        //系统的用户名
        String userName = System.getProperty("user.name");
        System.out.println("user的name" + userName);
        //系统的用户路径
        String userHome = System.getProperty("user.home");
        System.out.println("user的Home" + userHome);
        //系统的Dir
        String userDir = System.getProperty("user.Dir");
        System.out.println("user的Dir" + userDir);
    }
    //Math类：
    /*
     * java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型
     * abs 绝对值
     * acos，asin，atan，cos，sin，tan 三角函数
     * sqrt 平方根
     * pow（double a， double b）a的b次幂
     * log 自然对数
     * exp e为底指数
     * max（double a，double b）
     * min(double a,double b)
     * random() 返回0.0 到1.0的随机数
     * long round(double a) double 型数据a转换为long型（四舍五入）
     * toDegrees(double angrad)弧度--》角度
     * toRadians(double angdeg)角度-->弧度
     *
     * */


    /*
     *
     * BigInteger 和 BigDecimal
     *   因为无论int 还是 Integer 最大只能表示-2的三十一次方和2的三十一次方-1，Long类也是有限的，最大为2的63次方-1
     *   所以引用了BifInteger
     *
     *   因为在商业中，无论是double还是float的精度远远不够 ，所以引用了BifDecimal  支持任意精度
     *
     *常用方法：
     *   public BigInteger abs()： 返回此BifInteger的绝对值的BigInteger
     *   BigInteger add（BigInteger val）返回其值为（this+val）的BigInteger
     *   BigInteger  subtract(BigInteger val):返回其值为（this-val）的BigInteger
     *   BigInteger  multiply (BigInteger val):返回其值为（this*val）的BigInteger
     *   BigInteger  divide (BigInteger val):返回其值为（this/val）的BigInteger整数相除只保留整数部分
     *   BigInteger remainder (BigInteger val):返回其值为（this%val）的BigInteger      %
     *   BigInteger[] divideAndRemainder(BigInteger val):返回包含（this/val）后跟（this%val）的两个BigInteger的数组
     *   BigInteger pow(int exponent) 返回其值为（this的exponent次方的BigInteger
     * */
    @Test
    public void test2() {
        BigInteger b1 = new BigInteger("22222222222222222222222222222222222222222");
        BigDecimal b2 = new BigDecimal("1512.151");
        BigDecimal b3 = new BigDecimal("11");
        //输出b1
        System.out.println(b1);                     //22222222222222222222222222222222222222222
        //报异常  因为没有说 保留多少位或者 执行什么操作
//        System.out.println(b2.divide(b3));

        //b2作为被除数，b3作为除数  保留默认位小数 默认为3位  且四舍五入.ROUND_HALF_EVEN
        System.out.println(b2.divide(b3, BigDecimal.ROUND_HALF_EVEN)); //137.468

        // b2作为被除数，b3作为除数 保留15位小数  且四舍五入：ROUND_HALF_EVEN
        System.out.println(b2.divide(b3, 15, BigDecimal.ROUND_HALF_EVEN)); //137.468272727272727
    }

}
